home *** CD-ROM | disk | FTP | other *** search
- vbcc is (c) in 1995 by Volker Barthelmann
-
- (cga68k): changes in the code generator for amiga68k
- (cla68k): changes in the C library for amiga68k
- (vca68k): changes in the compiler frontend for amiga68k
-
- Changes since V0.2l
-
- - in conditional-expressions the type of the result was used for the
- generated comparison due to a bug
- - ceil() and floor() were added to m881.lib (cla68k)
- - flags may be specified more than once
- - vbcc does not change argv any more
- - output of errors/warnings changed and error/warning-texts put in <errors.h>
- - % with powers of two is not replaced by an 'and' any more if the operand is
- signed (cga68k)
- - entries in the history-file now in (bad) English rather than German
- - -dontwarn option added to suppress certain warnings
- - type conversions that are unnecessary on a certain machine may be omitted
-
- Aenderungen seit V0.2k
-
- - bei shifts werden keine arithmetischen Typerweiterungen mehr vorgenommen
- - endlose Fehlerschleifen sollten erkannt werden
- - Anfang eines SmallCode/SmallData-Modus; -sc und -sd schalten den jeweiligen
- Modus ein; deswegen wird auch vermehrt lea/pea verwendet (cga68k)
- - startup.o initialisiert nun a4 fuer den SmallData-Modus (cla68k)
- - die xref _LVO aus startup entfernt
- - fd2lib geschrieben
- - diverse Libraryfunktionen geschrieben (vla68k)
- - der rechte Teil einer conditional-expression ist jetzt eine
- conditional-expression (war faelschlicherweise expression)
- - Verwaltung der sections etwas geaendert; section=-1 am Anfang (cga68k)
- - Fehlerbehandlung verbessert: Initialisierungen von unvollstaendigen
- Strukturen/Unionen, Arrays mit size==0 und nicht vorhandene Identifier
- - Fehler bei der Erkennung von Fehler-Endlosschleifen behoben; funktioniert
- aber trotzdem nicht immer
- - Workaround fuer den compare-bug; leider nicht sehr schoen
- - Warnung bei dem Push-Problem
- - Ausdruecke hinter return wurden bemaengelt, wenn die Funktion void war
- - Funktionsargumente werden bei -O=256 nicht mehr sofort vom Stack geholt
- sondern, wenn moeglich gesammelt und dann auf einmal
-
- Aenderungen seit V0.2j
-
- - vc ruft jetzt 'FreePhxAss' statt 'CPhxAss' auf (vca68k)
- - free() verkraftet 0 (cla68k)
- - bei aufgetretenen Fehlern wird der Returncode auf EXIT_FAILURE gesetzt
- - keine Fehlermeldung bei Files ohne Funktionsdefinition mehr
- - Fehler behoben, der bei Verwendung einer Adressierungsart der Form
- (d,ax,dy.w[*z]) zu unnoetigen internal errors und evtl. Schlimmerem
- fuehrte (&7 vergessen) (cga68k)
- - difftime() wird in time.h als Makro definiert (cla68k)
- - #undef difftime in difftime.c eingefuegt (cla68k)
- - Deklaration von rename() in stdio.h korrigiert (cla68k)
- - wird Flag 8 (256) bei -O gesetzt, wird a5 nicht mehr als Framepointer
- benutzt (cga68k)
- - "offset out of object"-Meldungen geaendert
- - string-Funktionen geaendert (cla68k)
- - Fehler bei Registerallocation, der auftrat, wenn der Rueckgabewert nicht
- in einem Register zurueckgegen wird, behoben
- - Variablendeklaration geaendert; sollte jetzt korrekter sein und tentative
- definitions besser behandeln
- - fehlendes ; in stdlib.h eingefuegt (cla68k)
- - bei saveregs vor einem function call wird ein Scratchregister, ueber das
- die Funktion aufgerufen wird, nicht gespeichert
- - wenn der compare-Fehler auftritt sollte zumindest ein error gemeldet
- werden (cga68k)
- - wenn keine lokalen Variablen benutzt werden, wird kein Platz auf dem
- Stack gemacht (cga68k)
- - Berechnung des Alignments fuer Kopierschleife sollte jetzt auch ohne
- Framepointer korrekt sein (cga68k)
- - vc stark geaendert und config-file eingefuehrt (vca68k)
- - bei Meldungen wird der Filename mit ausgegeben
-
- Aenderungen seit V0.2i
-
- - Verbesserung der Codegenerierung fuer FPU-Operationen (cga68k)
- - Problem bei USEQ2ASZ und Zusammenfassen von IC/ASSIGN behoben
- - floating point nun auch ohne FPU moeglich, noch nicht 100% fehlerfrei (cga68k/cla68k)
- - Anfang einer Mathelibrary fuer die IEEE-Libraries (cla68k)
- FloatingPoint<->UnsignedInteger nicht korrekt
- - Fehler bei switch(UNSIGNED) behoben
- - alignment von struct-members sollte wieder passen
- - unsigned char/short->fp mit FPU korrigiert (cga68k)
- - ein labeled-statement enthaelt das nachfolgende statement
- - _main aus mieee.lib oeffnet die Libraries nun in der richtigen
- Reihenfolge (autsch) (cla68k)
- - Test auf am->Register in get_reg() eingebaut
- - Fehler bei Kopierschleife behoben
- - allocreg zaehlt bei Nutzung von erweiterten Adressierungsarten als
- zerstoerend; sollte damit jetzt halbwegs stabil sein; allerdings duerften
- noch internal errors, die aber wohl nichts mehr bedeuten, drin sein
- - allocreg/freereg von Registervariablen wird aus Code entfernt und internal
- errors sind beseitig; sollte nur Effekt haben, wenn Returnregister als
- Registervariable verwendet wird
- - bei initialisierten Unionen werden jetzt auch die uebrigen Werte aufgefuellt
- - bei initialisierten auto Strukturen und Unionen duerfen auch Strukturen/
- Unionen gleichen Typs angegeben werden
- - die Kopierroutinen sollten jetzt in (fast?) allen Faellen korrekt
- funktionieren und teilweise auch schneller sein
- - Fehler mit auto arrays der Form a[]=... behoben; der Offset wurde nicht
- hochgezaehlt
- - difftime in der Math Library (cla68k)
- - einige ueble Fehler aus dem frontend fuer amiga68k entfernt (vca68k)
- - unbenannte Bitfelder werden bei Initialisierungen jetzt uebergangen
- - strengere Pruefung bei Zuweisungen zwischen Zeigern mit verschiedenen
- Qualifiern
- - Funktionsdefinitionen nach altem Stil erzeugen keinen Prototype mehr
- - float Parameter in alten Funktionsdefinitionen werden korrekt behandelt
- - diverse Aenderungen bei der Belegung von Registervariablen; gibt jetzt
- Register etwas leichter her
-
- Aenderungen seit V0.2h
-
- - Fehler beim Kommaoperator behoben und Meldung bei fehlenden sidefx
- - Konvertierungsroutinen fuer target data types geaendert
- - Routinen fuer Fehler/Warnungen akzeptieren jetzt beliebige Parameterlisten
- - Initialisierungen wie (cast)&var werden erlaubt (evtl. Probleme, wenn
- verschiedene Pointer existieren)
- - die Adresse eines Arrays kann jetzt ermittelt werden
- - Ueberpruefung der Gleichheit von Typen verbessert
- - Registerbelegung bei return verbessert
- - ueberfluessige Warnung bei nicht initialisierter const extern Variable
- entfernt
- - Franks div/mod in vc.lib eingebaut (cla68k)
- - Fliesskomma-returnwerte nur noch in fp0, wenn fuer fpu generiert wird (cga68k)
- - Stringkonstanten sind nicht mehr const char[] sondern char[]
- - vc versteht nun -l Option (vca68k)
- - printf/scanf durch leicht veraenderte Versionen aus libnix ersetzt (cla68k)
- - Anfang einer Mathelibrary fuer 68881 (cla68k)
- - (hoffentlich) korrekte floating point->integer Rundung bei FPU (cga68k)
-
- Aenderungen seit V0.2g
-
- - Fehler bei Registerbelegung in totem Code behoben
- - Fehler bei Registerbelegung in switch-statements behoben
- - boeser Fehler bei Variablen mit nicht-Register-return-values behoben
- - vc.lib: Ctrl-C wird erkannt (manchmal) (cla68k)
- - vc.lib: malloc() verbessert (cla68k)
- - vc.lib: limits.h korrigiert (cla68k)
- - vc.lib: time.h und time-Funktionen eingebaut (cla68k)
- - keine Warnung mehr bei const typedefs
- - Warnung bei Initialisierung von typedefs
- - verschiedene Aenderungen bei der Behandlung von storage-classes
- - globale static Variablen werden jetzt nicht mehr exportiert
- - storage-classes in Prototypen werden beachtet
- - const Variablen werden nicht mehr als Konstanten behandelt (war fehlerhaft)
- - Fehler in union atyps behoben (vuchar war zchar statt zuchar, argh!)
- - string concatenation eingebaut
- - Umwandlung unsigned->floating point mit FPU korrigiert (cga68k)
- - Vergleiche bei unsigned werden jetzt korrekt behandelt (cga68k)
- - bessere Behandlung von Funktionsprototypen
- - Zuweisungen zwischen Funktions- und Datenzeigern sind nicht mehr erlaubt
-
- Aenderungen seit V0.2f
-
- - -snma entfernt (cga68k)
- - einige Vereinfachungen im Codegenerator wegen reg/freg-Benutzung (cga68k)
- - Entfernung einiger alter Codefragmente im Codegenerator (cga68k)
- - Abfrage bei malloc() eingebaut
- - einige Fehler bei der IC-Generierung im Zusammenhang mit Registerbelegung
- behoben
- - Fehlerbehandlung verbessert; nach -maxerror=n (default 10) Fehlern
- wird Uebersetzung abgebrochen (bei 0 wird nicht abgebrochen)
- - -ansi unterdrueckt unwichtige Warnungen und Warnungen mit ANSI-Verletzung
- werden als Fehler behandelt
- - Flags loeschen jetzt durch &=~
- - Zuweisungen von Arrays werden korrekt(er) behandelt (cga68k)
- - Zuweisungen von groesseren Typen geaendert, muss aber noch optimiert
- werden. (cga68k)
- - falscher Returncode in alg_opt() korrigiert
- - Behandlung von const-Konstanten korrigiert
- - Meldung, wenn main() nicht int ist
- - arithmetik mit void * nicht mehr erlaubt
- - casting nach void erlaubt
-
- Aenderungen seit V0.2e
-
- - Nutzung von 680x0-Adressierungsarten eingebaut (cga68k)
- - Schreibweise displ(ax) durch (displ,ax) ersetzt (cga68k)
- - Nutzung von reg/freg; dadurch kein zusaetzlicher Pass noetig (cga68k)
-
- Aenderungen seit V0.2d
-
- - Typpruefung bei Zuweisungen verbessert und nun auch bei Initialisierungen
- - freed free Register teilweise behoben (?)
- - Deklarationen von Prototypen ohne Typ werden bemaekelt
- - Abhanegigkeit in eigenen Include-Dateien behoben
- - Fehler bei arithmetischen Operationen behoben (cga68k)
- - falsche Fehlermeldung bei unsigned Typ als Schleifenbedingung
- - / und % wird nun auch mit 68000 unterstuetzt (wenn auch ineffizient) (cga68k)
- - Fehler bei ADDI2P und SUBIFP behoben
- - Fehler (mit DREFOBJ) bei Zusammenfassung op x,y->reg;move reg->z behoben
- - Optionen, die einen Parameter benoetigen, muessen jetzt -opt=parameter
- geschrieben werden, also z.B. vbcc -cpu=68020 file.c
- (das war noetig, um das Frontend und Wildcards zu vereinfachen)
- - enumerations eingebaut; noch einfach ohne grosse Tests, Tags werden ignoriert
- - arithmetische const Typen werden in Ausdruecken als Konstanten behandelt
-
- Aenderungen seit V0.2c
-
- - -noa4 Option hinzugekommen (cga68k)
- - Fehler beim Vertauschen von COMPARE-Argumenten und mustrepeat behoben (cga68k)
- - Fehler bei vorzeitiger Registerfreigabe bei POSTINC/POSTDEC behoben
- - Fehler bei mehreren Variablendeklarationen mit Funktionen behoben
- - Fehler bei dc float|double behoben (cga68k)
- - Fehler bei sections und dc/ds behoben (cga68k)
- - Fehler bei Rechnungen mit FP-Registern behoben (cga68k)
- - diverse Fehler bei a op= b behoben
- - jetzt hoffentlich immer korrekte Verwendung von lsl/lsr/asr (cga68k)
- - vbcc hat sich endlich erfolgreich selbst kompiliert
- - Fliesskommakonstanten eingebaut; Berechnung aber noch zu ungenau
- - Deklaration fuer Bitfields eingebaut; werden aber noch als Integers behandelt
- - Fehler bei interner Verarbeitung von Fliesskommazahlen behoben
- - Deklarationen der Form unsigned a; extern a; etc. werden zugelassen
- - Anfaenge einer eigenen C-Library
-
-
- Noch zu behebende bekannte Fehler:
-
- - kein korrektes Auswerten der Fehler und Setzen des Returncodes (erledigt)
- - keine sehr intelligenten Fehlermeldungen
- - manchmal ein fehlerhafter unexpected end of file error (erledigt)
- - Zeilennummern bei Fehlern falsch (erledigt)
- - bei Fehlern wird oft die darauffolgende Zeile angezeigt
- - bei Fehlern waehrend der Codegeneration wird die letzte Zeile der
- Funktion, in der der Problem auftritt oder die erste Zeile danach
- angezeigt
- - kein Praeprozessor (dadurch auch Einschraenkungen bei Formatierung des Src)
- man muss also erst einen externen (z.B. cpp vom gcc oder dcpp vom Dice)
- laufen lassen
- - keine enums (erledigt)
- - keine Bitfields (erledigt)
- - keine FP-Konstanten (erledigt)
- - FP nur mit FPU (erledigt)
- - keine Div. und Modulo mit cpu<68020 (erledigt)
- - keine erweiterten Adressierungsarten werden unterstuetzt (erledigt, aber noch Probleme)
- - ungenuegendes typechecking bei Initialisierungen (erledigt)
- - Codegenerator muss teilweise Funktionen zweimal generieren und benutzt dann
- ein Rueckwaerts-Seek=>keine Tapes/Pipes o.ae. als Ziel moeglich (erledigt)
- - benutzt z.Z. noch gets(), dadurch Abstuerze bei zu langen Zeilen moeglich (erledigt)
- - keine Abfrage bei Speichermangel (erledigt)
- - noch ein paar einkompilierte Limits
- - noch keine C-Library (teilweise erledigt)
- - Teilweise unnoetig umstaendlich, lang, da ich oft mit Cut&Paste im Editor
- gearbeitet habe, statt etwas geschickter zu schreiben (geht halt schneller).
- Dadurch ist es auch sehr wichtig, mit einem gut optimierenden Compiler zu
- uebersetzen, da vbcc sonst 3-4 mal langsamer laeuft. (liegt mehr an der
- C-Library)
- - Programm- und Lokale Datensektionen muessen <32(64?)KB sein
- bei cpu 68020 duerfte diese Beschraenkung wegfallen, glaube ich
- - Initialisierungen von Arrays sind z.Z. noch ausserordentlich ineffizient
- - noch diverse schlechte Codegenerierung, z.B. Zuweisungen oder Push, Pop
- von Elementen mit sizeof>4 (etwas verbessert)
- - einige konstante Ausdruecke (z.B. casts von Adressen) werden nicht als
- solche erkannt (mehr oder weniger erledigt)
- - evtl. ANSI-unzulaessige Vereinfachungen von arithmetischen Ausdruecken
- - Fliesskommarechnungen mit FPU koennen wegen erhoehter Genauigkeit der
- FPU-Register nicht IEEE/ANSI-Konform sein
- - Umwandlungen FP<->unsigned nicht korrekt (unsigned->FP erledigt)
- - keine anstaendige Dokumentation
- - manchmal wird zwischen push-regs und restore-regs ein Register frei und
- deshalb nicht vom Stack geholt (gibt sicherlich Probleme, wenn es nicht
- das einzige gerettete Register war) (erledigt?)
- - Initialisierungen in Switch-Bloecken werden nicht ausgefuehrt (ist aber wohl ok)
- - static Variablen werden exportiert (erledigt)
- - casting nach void wird nicht erlaubt (erledigt)
- - korrekte Definition von main() wird nicht geprueft (erledigt)
- - Funktionen- und Datenzeigerkollisionen werden nicht erkannt (erledigt)
- - Zuweisungen *Typ<->*(const Typ) werden erlaubt (erledigt?)
- - Stringkonstanten sind vom Typ const char (erledigt)
- - enum-Konstanten scheinen Speicher zu verbrauchen
- - structure-expressions werden als lvalues akzeptiert
- - der Spezialfall &Array wird noch bemaekelt (erledigt)
- - bei shift mit einem long wird noch nach long gewandelt
- - Adressierungsarten der Form (d,ax,dy),dy werden wegen Kollision von dy
- nicht benutzt
- - Evtl. Probleme bei erweiterten Adressierungsarten und Umwandlungen in
- kleinere Typen (wegen zusaetlichem Offset) (behoben)
- - evtl. koennten Adressierungsarten falsch benutzt werden; muss noch
- einiges getestet und ueberlegt werden (sieht inzwischen ganz gut aus)
- - wenn fuer COMPARE ein Register auf den Stack muss, wird wohl falscher Code
- erzeugt
- - gen_ds braucht eigentlich den Typ (erledigt)
- - const Variablen werden auch als Arraygroessen akzeptiert (z.Z. ausgebaut)
- - Initialisierungen noch sehr fehlerhaft (von unions, von gleichen Typen
- statt Konstanten und Enforcerhits etc.) (erledigt?)
- - f() wird in Definitionen noch nicht durch f(void) ersetzt (erledigt)
- - const Variablen sollen ins Code-Segment
- - bei Funktionsprototypen werden storage-classes ignoriert (erledigt)
- - Probleme beim Kopieren von auto-Array-Initialisierungen (erledigt)
- - Was passiert, wenn bei einer Kopierschleife fuer PUSH ein Register auf
- den Stack muss? Koennte boese enden.
- - noch Probleme bei Typkonversion bei Funktionsargumenten (bes. double);
- auch in Bezug auf Unterschied alte<->neue Deklarationen (erledigt?)
- - irgendwo generiert er bei FPU-Benutzung "move.s" statt "move.l" (erledigt)
- - Gueltigkeitsbereich bei Funktionsprototypen nicht ganz korrekt
- - storage-classes/external-linkage noch nicht korrekt (erledigt?)
- - free() muss auf 0 testen (erledigt)
- - Zugriffe auf volatile Objekte zaehlen nicht als Seiteneffekte
- - a%2^n darf bei a<0 nicht so optimiert werden
-
- ...to be continued...
-
- Vermutlich habe ich da auch einige vergessen und es werden zahlreiche noch
- unbekannte auftreten. Diese mir bitte mitteilen (besonders internal errors)
-
- Volker (volker@vb.franken.de)
-
-